iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0
自我挑戰組

掘地土撥鼠的設計歷險記系列 第 3

Factory Method Pattern - 工廠模式

  • 分享至 

  • xImage
  •  

由於昨天成為一日搬家工,比賽就被中斷了😭,不過我們主要目的是學成golang所以我們就繼續吧!

Introduction

中文為工廠模式,作為建立新物件的唯一接口。在使用的場景中通常會有三種角色:

  • 工廠 ( Factory )
  • 工廠實體 ( Concrete Factory)
  • 產品介面 ( Product )
  • 產品 ( Concrete Product )

使用場景

當開發人員無法確定欲建立類別的具體型別及依賴關係,就可使用工廠模式進行開發,減少 coupling (耦合)。

雛形演練

UML

  • 兩個介面:Factory, Product
  • 兩個實作:ConcreteFactory, ConcreteProduct
  • Prodcut 使用時會建立工廠物件進行使用

https://ithelp.ithome.com.tw/upload/images/20230903/20115082zDx7Uf6fnN.png

Factory

package Factory

type Factory interface {
	FactoryMethod(owner string) Product
}

Concrete Factory

package Factory

type ConcreteFactory struct {
}

func (cf *ConcreteFactory) FactoryMethod(owner string) Product {
	p := &ConcreteProduct{}
	return p
}

product

package Factory

type Product interface {
	Use()
}

Concrete Product

package Factory

import "fmt"

type ConcreteProduct struct {
}

func (p *ConcreteProduct) Use() {
	fmt.Println("Use Concrete Product")
}

優缺點比較

優點

  • 可讓我們的系統更具可擴展性。工廠模式具有相當高的自主管理性,開發人員往後要新增產品時,無須透過額外的更改程序即可使用。
  • 比較容易寫測試,假如今天工廠負責了10種不同型號的產品,基於我們已經提前對工廠及產品有了介面的統一控管,我們可以單獨地位這10種產品寫測試。

缺點

  • 可擴展性有限,上面說到: 當開發人員要新增產品時,無須透過額外的更改程序就可使用,此句話意思是開發人員只需針對工廠類別進行特殊邏輯修改即可,但當產品數量多起來時,工廠類別的邏輯就會相對複雜許多。

Conclusion

Design Pattern

工廠模式是一種創建型模式,用於建立新物件的唯一接口,它幫助降低系統的耦合度。通過三種主要的角色(工廠、工廠實體、產品介面和產品),它使得物件創建更為靈活和可管理。這樣的模式對於應對系統擴展或修改具有一定的靈活性

Golang

在程式碼部分,使用Golang語言實作了工廠模式的基本框架。這包括了工廠和產品的介面(Factory 和 Product),以及如何實作這些介面的類別(ConcreteFactory 和 ConcreteProduct)。

UML

  • 這是關聯的指標,用來闡述介面以及實作端的關係,箭頭指向的地方就是實作端要實作介面

    https://ithelp.ithome.com.tw/upload/images/20230903/20115082dFUcVfALNU.png

  • 這是關聯的指標,用來闡述當一個物件裡包含了另一個物件的關係,箭頭指向的地方是被包含的物件
    https://ithelp.ithome.com.tw/upload/images/20230903/20115082z7n54D9Nmj.png


上一篇
Singleton 單例模式
下一篇
Builder Pattern - 生成器模式
系列文
掘地土撥鼠的設計歷險記11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言